const path = require("path"); // NodeJs路径处理模块
const createError = require("http-errors"); // HTTPError处理库
const cookieParser = require("cookie-parser"); // Cookie中间件
const logger = require("morgan"); // Express默认日志中间件

const express = require("express");
const app = express(); // 顶级函数，创建应用
const accountRouter = require("./routes/account");

// __dirname 当前文件所属目录的绝对路径
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs"); // 模板引擎使用ejs
app.use(logger("dev")); // 开发环境中使用，返回数据较简约但足够
// app.use(logger("combined")); 线上环境中使用，返回数据更详细
app.use(cookieParser()); // 中间件使用，Cookie操作处理
app.use(express.json()); // 中间件使用，JSON数据解析处理
app.use(express.urlencoded({ extended: false })); // 请求体数据解析
app.use(express.static(path.join(__dirname, "public"))); // 静态资源
app.use("/", accountRouter); // 注册路由

// 404异常捕获并转发到错误处理程序
app.use(function(req, res, next) { next(createError(404)); });
// 错误处理程序(仅在开发环境中提供详情)
app.use(function(err, req, res) {
    res.locals.message = err.message; res.status(err.status || 500);
    res.locals.error = req.app.get("env") === "development" ? err : {};
    res.render("error"); // 呈现错误信息至模板页面error.ejs
});

module.exports = app;
